using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.Alf.Site.Entidades;
using MakeIT.Alf.Site.Negocios;

namespace MakeIT.Alf.Site.Apresentacao
{
	public partial class CadastroLogradouro : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);

                atualizarDdlIdEstado(null, null);
                atualizarDdlIdLogtipo(null, null);

			}

		}

        protected void atualizarDdlIdEstado(object sender, ImageClickEventArgs e)
        {
            List<EstadoVO> eVOLista = new List<EstadoVO>();
            EstadoVO eVO = EstadoVO.CreateVO();
            eVO.idEstado = -1;
            eVO.estado = "";
            eVOLista.Add(eVO);
            eVOLista.AddRange(AlfDAO.getEstados());
            Util.CarregarCombo(ddlEstado, eVOLista);

            List<EstadoVO> idEstadoCadVOs = new List<EstadoVO>();
            EstadoVO idEstadoCadVO = EstadoVO.CreateVO();
            idEstadoCadVO.idEstado = -1;
            idEstadoCadVO.estado = "";
            idEstadoCadVOs.Add(idEstadoCadVO);
            idEstadoCadVOs.AddRange(AlfDAO.getEstados());
            Util.CarregarCombo(this.ddlCadIdEstado, idEstadoCadVOs);

            ddlEstado_SelectedIndexChanged(null, null);
            ddlCadIdEstado_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlIdCidade(object sender, ImageClickEventArgs e)
        {
            List<CidadeVO> idCidadeVOs = new List<CidadeVO>();
            CidadeVO idCidadeVO = CidadeVO.CreateVO();
            idCidadeVO.idCidade = -1;
            idCidadeVO.cidade = "";
            idCidadeVOs.Add(idCidadeVO);
            if (!string.IsNullOrEmpty(ddlCadIdEstado.SelectedValue) && !ddlCadIdEstado.SelectedValue.Equals("-1"))
            {
                idCidadeVOs.AddRange(AlfDAO.getCidades(null, null, int.Parse(ddlCadIdEstado.SelectedValue)));
            }
            Util.CarregarCombo(this.ddlCadIdCidade, idCidadeVOs);

            ddlCadIdCidade_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlIdBairro(object sender, ImageClickEventArgs e)
        {
            List<BairroVO> idBairroCadVOs = new List<BairroVO>();
            BairroVO idBairroCadVO = BairroVO.CreateVO();
            idBairroCadVO.idBairro = -1;
            idBairroCadVO.bairro = "";
            idBairroCadVOs.Add(idBairroCadVO);
            if (!string.IsNullOrEmpty(ddlCadIdCidade.SelectedValue) && !ddlCadIdCidade.SelectedValue.Equals("-1"))
            {
                idBairroCadVOs.AddRange(AlfDAO.getBairros(null, null, int.Parse(ddlCadIdCidade.SelectedValue)));
            }
            Util.CarregarCombo(this.ddlCadIdBairro, idBairroCadVOs);
        }

        protected void atualizarDdlIdLogtipo(object sender, ImageClickEventArgs e)
        {
            List<LogtipoVO> idLogtipoCadVOs = new List<LogtipoVO>();
            idLogtipoCadVOs.AddRange(AlfDAO.getLogtipos());
            Util.CarregarCombo(this.ddlCadIdLogtipo, idLogtipoCadVOs);

            LogtipoVO idLogtipoVO = LogtipoVO.CreateVO();
            idLogtipoVO.idLogTipo = -1;
            idLogtipoVO.sigla = "";
            List<LogtipoVO> idLogtipoVOs = new List<LogtipoVO>();
            idLogtipoVOs.Add(idLogtipoVO);
            idLogtipoVOs.AddRange(AlfDAO.getLogtipos());
            Util.CarregarCombo(this.ddlIdLogTipo, idLogtipoVOs);
        }
        
        protected void ddlEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<CidadeVO> idCidadeVOs = new List<CidadeVO>();
            CidadeVO idCidadeVO = CidadeVO.CreateVO();
            idCidadeVO.idCidade = -1;
            idCidadeVO.cidade = "";
            idCidadeVOs.Add(idCidadeVO);
            if (!string.IsNullOrEmpty(ddlEstado.SelectedValue) && !ddlEstado.SelectedValue.Equals("-1"))
            {
                idCidadeVOs.AddRange(AlfDAO.getCidades(null, null, int.Parse(ddlEstado.SelectedValue)));
            }
            Util.CarregarCombo(this.ddlCidade, idCidadeVOs);

            ddlCidade_SelectedIndexChanged(null, null);
        }

        protected void ddlCidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            List<BairroVO> idBairroVOs = new List<BairroVO>();
            BairroVO idBairroVO = BairroVO.CreateVO();
            idBairroVO.idBairro = -1;
            idBairroVO.bairro = "";
            idBairroVOs.Add(idBairroVO);
            if (!string.IsNullOrEmpty(ddlCidade.SelectedValue) && !ddlCidade.SelectedValue.Equals("-1"))
            {
                idBairroVOs.AddRange(AlfDAO.getBairros(null, null, int.Parse(ddlCidade.SelectedValue)));
            }
            Util.CarregarCombo(this.ddlIdBairro, idBairroVOs);
        }

        protected void ddlCadIdEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlIdCidade(null, null);

            ddlCadIdCidade_SelectedIndexChanged(null, null);
        }

        protected void ddlCadIdCidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            atualizarDdlIdBairro(null, null);
        }



        /// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			LogradouroVO logradouroVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdLogradouro.Text))
				{
					logradouroVO = LogradouroVO.CreateVO();
					logradouroVO.cadastro = DateTime.Now;
					logradouroVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					logradouroVO = AlfDAO.getLogradouro(Int32.Parse(this.txtCadIdLogradouro.Text));
				}

                logradouroVO.idLogTipo = Int32.Parse(this.ddlCadIdLogtipo.SelectedValue);
				logradouroVO.logradouro = this.txtCadLogradouro.Text;
				logradouroVO.idBairro = Int32.Parse(this.ddlCadIdBairro.SelectedValue);
				//logradouroVO.cep = this.txtCadCep.Text;
				logradouroVO.edicao = DateTime.Now;
				logradouroVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					logradouroVO.idLogradouro = (int)AlfDAO.newLogradouro(logradouroVO);
				else
					AlfDAO.setLogradouro(logradouroVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdLogradouro.Text = logradouroVO.idLogradouro.ToString();
				this.ltCadastradoPor.Text = logradouroVO.cadastradoPor;
				this.ltEditadoPor.Text = logradouroVO.editadoPor;
				this.ltDataCadastro.Text = logradouroVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = logradouroVO.edicao.ToString("dd/MM/yyyy");

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idLogradouro = null;
			int? idLogTipo = null;
			string logradouro = null;
            int? idEstado = null;
            int? idCidade = null;
            int? idBairro = null;
            string cep = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdLogradouro.Text))
				{
					idLogradouro = Int32.Parse(this.txtIdLogradouro.Text);
				}

				if (!this.ddlIdLogTipo.SelectedValue.Equals("-1"))
				{
                    idLogTipo = Int32.Parse(this.ddlIdLogTipo.SelectedValue);
				}

				if (!string.IsNullOrEmpty(this.txtLogradouro.Text))
				{
					logradouro = this.txtLogradouro.Text;
				}

                if (!string.IsNullOrEmpty(ddlEstado.SelectedValue) && !this.ddlEstado.SelectedValue.Equals("-1"))
                {
                    idEstado = Int32.Parse(this.ddlEstado.SelectedValue);
                }
                if (!string.IsNullOrEmpty(ddlCidade.SelectedValue) && !this.ddlCidade.SelectedValue.Equals("-1"))
                {
                    idCidade = Int32.Parse(this.ddlCidade.SelectedValue);
                }
                if (!string.IsNullOrEmpty(ddlIdBairro.SelectedValue) && !this.ddlIdBairro.SelectedValue.Equals("-1"))
				{
					idBairro = Int32.Parse(this.ddlIdBairro.SelectedValue);
				}

                //if (!string.IsNullOrEmpty(this.txtCep.Text))
                //{
                //    cep = this.txtCep.Text;
                //}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = AlfDAO.getLogradouros(idLogradouro, idEstado, idCidade, idBairro, idLogTipo, logradouro, cep);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabLogradouro.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdLogradouro.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdLogradouro.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			LogradouroVO logradouroVO = null;
			int idLogradouro = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idLogradouro = Int32.Parse(argumentos[0]);

				//Recupera o objeto
                logradouroVO = buscaLogradouro(idLogradouro);
                
				this.txtCadIdLogradouro.Text = logradouroVO.idLogradouro.ToString();
				this.txtCadLogradouro.Text = logradouroVO.logradouro;
				//this.txtCadCep.Text = logradouroVO.cep;
				this.ltCadastradoPor.Text = logradouroVO.cadastradoPor;
				this.ltEditadoPor.Text = logradouroVO.editadoPor;
				this.ltDataCadastro.Text = logradouroVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = logradouroVO.edicao.ToString("dd/MM/yyyy");

				//Habilita tab page do cadastro
				this.tabLogradouro.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}
        protected LogradouroVO buscaLogradouro(int id)
        {
            LogradouroVO idLogradouro = AlfDAO.getLogradouro(id);
            idLogradouro.idBairroVO = AlfDAO.getBairro(idLogradouro.idBairro);
            idLogradouro.idBairroVO.idCidadeVO = AlfDAO.getCidade(idLogradouro.idBairroVO.idCidade);
            idLogradouro.idBairroVO.idCidadeVO.idEstadoVO = AlfDAO.getEstado(idLogradouro.idBairroVO.idCidadeVO.idEstado);


            ddlCadIdEstado.SelectedValue = Convert.ToString(idLogradouro.idBairroVO.idCidadeVO.idEstadoVO.idEstado);
            ddlCadIdEstado_SelectedIndexChanged(null, null);
            ddlCadIdCidade.SelectedValue = Convert.ToString(idLogradouro.idBairroVO.idCidadeVO.idCidade);
            ddlCadIdCidade_SelectedIndexChanged(null, null);
            ddlCadIdBairro.SelectedValue = Convert.ToString(idLogradouro.idBairroVO.idBairro);

            ddlCadIdLogtipo.SelectedValue = Convert.ToString(idLogradouro.idLogTipo);

            return idLogradouro;

        }

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdLogradouro.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Trava apenas os text box da PK
			this.txtCadIdLogradouro.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			LogradouroVO logradouroVO = null;

			try
			{
				//Cria objeto
				logradouroVO = LogradouroVO.CreateVO();
				logradouroVO.idLogradouro = Int32.Parse(this.txtCadIdLogradouro.Text);

				//verifica se tem pessoa dependentes deste registro
				if (AlfDAO.getCountPessoaxIdLogradouro(logradouroVO.idLogradouro) > 0)
				{
					Util.ExibeAlert(this, "Há Pessoas(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//verifica se tem imovel dependentes deste registro
                if (AlfDAO.getCountImovelxIdLogradouro(logradouroVO.idLogradouro) > 0)
				{
					Util.ExibeAlert(this, "Há Imóvel(is) associado(s) a este registro. Exclusão não permitida");
					return;
				}
				
                
                //Chama metodo para excluir registro
				AlfDAO.delLogradouro(logradouroVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}

        protected void grvResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Label lblTipoLog = (Label)e.Row.FindControl("lblTipoLogradouro");
                HiddenField hfIdTipoLog = (HiddenField)e.Row.FindControl("hfIdTipoLogradouro");
                lblTipoLog.Text = AlfDAO.getLogtipo(Convert.ToInt32(hfIdTipoLog.Value)).sigla;
            }
        }
	}
}
